﻿using System;
using System.IO;

class Program
{
    /// <summary>
    /// 列出D硬盘中有多少txt文件
    /// </summary>
    /// <param name="args"></param>
    static void Main(string[] args)
    {
        // 定义要搜索的目录路径，这里设置为D盘根目录
        string directoryPath = @"D:\";

        // 调用 CountTxtFiles 方法，传入目录路径，获取 .txt 文件的数量
        int txtFileCount = CountTxtFiles(directoryPath);

        // 输出 .txt 文件的数量到控制台
        Console.WriteLine($"Number of .txt files found: {txtFileCount}");
    }

    // 定义一个方法，用于计数指定目录及其子目录中的 .txt 文件数量
    static int CountTxtFiles(string directoryPath)
    {
        int count = 0;

        try
        {
            // 获取当前目录下的所有子目录
            string[] subdirectories = Directory.GetDirectories(directoryPath);

            // 遍历所有子目录，递归调用 CountTxtFiles 方法
            foreach (string subdirectory in subdirectories)
            {
                try
                {
                    count += CountTxtFiles(subdirectory);
                }
                catch (UnauthorizedAccessException)
                {
                    // 如果没有权限访问某个目录，记录错误信息并继续
                }
                catch (DirectoryNotFoundException)
                {
                    // 如果指定的目录不存在，记录错误信息并继续
                    Console.WriteLine($"The directory '{subdirectory}' does not exist.");
                }
                catch (Exception ex)
                {
                    // 捕获其他可能的异常，记录错误信息并继续
                    Console.WriteLine($"An error occurred in directory '{subdirectory}': {ex.Message}");
                }
            }

            // 获取当前目录下的所有 .txt 文件
            string[] txtFiles = Directory.GetFiles(directoryPath, "*.txt");

            // 增加找到的 .txt 文件数量
            count += txtFiles.Length;
        }
        catch (UnauthorizedAccessException)
        {
            // 如果没有权限访问当前目录，记录错误信息并返回0
            return 0;
        }
        catch (DirectoryNotFoundException)
        {
            // 如果指定的目录不存在，记录错误信息并返回0
            Console.WriteLine($"The directory '{directoryPath}' does not exist.");
            return 0;
        }
        catch (Exception ex)
        {
            // 捕获其他可能的异常，记录错误信息并返回0
            Console.WriteLine($"An error occurred in directory '{directoryPath}': {ex.Message}");
            return 0;
        }

        return count;
    }
}